using Godot;
using System;

public partial class GenerateCircle : Node
{
    [Export] private StringName _mFilePath;
    [Export] private Color _mColor;
    [Export] private int _mRadius;
    
    public void SaveCircleTexture(string filePath, int radius, Color color)
    {
        // 生成圆形纹理
        Texture2D texture = GenerateCircleTexture(radius, color);
        
        // 获取图像
        Image image = texture.GetImage();
        
        // 修复：将Godot资源路径转换为系统绝对路径
        string absolutePath = ProjectSettings.GlobalizePath(filePath);
        
        // 确保目录存在
        string directory = System.IO.Path.GetDirectoryName(absolutePath);
        if (!string.IsNullOrEmpty(directory) && !DirAccess.DirExistsAbsolute(directory))
        {
            DirAccess.MakeDirRecursiveAbsolute(directory);
        }
        
        // 保存为PNG - 使用转换后的绝对路径
        Error error = image.SavePng(absolutePath);
        
        if (error == Error.Ok)
        {
            GD.Print($"圆形纹理已保存到: {absolutePath}");
        }
        else
        {
            GD.PrintErr($"保存失败: {error}，地址：{absolutePath}");
        }
    }
    
    // 生成圆形纹理的方法（同上）
    // 生成圆形纹理的方法
    public static Texture2D GenerateCircleTexture(int radius, Color color)
    {
        int size = radius * 2;
        Image image = Image.CreateEmpty(size, size, false, Image.Format.Rgba8);
        image.Fill(Colors.Transparent);
        
        Vector2 center = new Vector2(radius, radius);
        
        for (int x = 0; x < size; x++)
        {
            for (int y = 0; y < size; y++)
            {
                Vector2 pixelPos = new Vector2(x, y);
                float distance = pixelPos.DistanceTo(center);
                
                if (distance <= radius)
                {
                    image.SetPixel(x, y, color);
                }
            }
        }
        
        return ImageTexture.CreateFromImage(image);
    }
    
    // 使用示例
    public override void _Ready()
    {
        // 生成圆形纹理并展示在屏幕中心
        SaveCircleTexture(_mFilePath,_mRadius,_mColor);
        
        
        
    }
}